package com.bi.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bi.entity.ComponentCategory;

import java.util.List;

/**
 * 组件分类服务接口
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
public interface ComponentCategoryService extends IService<ComponentCategory> {

    /**
     * 创建分类
     * 
     * @param category 分类信息
     * @return 创建结果
     */
    boolean createCategory(ComponentCategory category);

    /**
     * 更新分类
     * 
     * @param category 分类信息
     * @return 更新结果
     */
    boolean updateCategory(ComponentCategory category);

    /**
     * 删除分类
     * 
     * @param id 分类ID
     * @return 删除结果
     */
    boolean deleteCategory(Long id);

    /**
     * 获取分类树
     * 
     * @param componentType 组件类型
     * @return 分类树
     */
    List<ComponentCategory> getCategoryTree(String componentType);

    /**
     * 获取根分类列表
     * 
     * @param componentType 组件类型
     * @return 根分类列表
     */
    List<ComponentCategory> getRootCategories(String componentType);

    /**
     * 获取子分类列表
     * 
     * @param parentId 父分类ID
     * @return 子分类列表
     */
    List<ComponentCategory> getChildrenCategories(Long parentId);

    /**
     * 获取分类路径
     * 
     * @param categoryId 分类ID
     * @return 分类路径
     */
    List<ComponentCategory> getCategoryPath(Long categoryId);

    /**
     * 移动分类
     * 
     * @param categoryId 分类ID
     * @param newParentId 新父分类ID
     * @return 移动结果
     */
    boolean moveCategory(Long categoryId, Long newParentId);

    /**
     * 检查分类名称是否存在
     * 
     * @param name 分类名称
     * @param parentId 父分类ID
     * @param excludeId 排除的分类ID
     * @return 是否存在
     */
    boolean existsCategoryName(String name, Long parentId, Long excludeId);

    /**
     * 获取分类下的组件数量
     * 
     * @param categoryId 分类ID
     * @return 组件数量
     */
    int getComponentCount(Long categoryId);

    /**
     * 批量创建默认分类
     * 
     * @param componentType 组件类型
     * @return 创建结果
     */
    boolean createDefaultCategories(String componentType);

    /**
     * 清理空分类
     * 
     * @return 清理数量
     */
    int cleanEmptyCategories();
}